﻿using System.Collections.Generic;
using System.Web;
using DAL;
using BLL;

using Entetities;

/**
 * ShoppingCart class
 * 
 * Lưu trữ sản phẩm đã mua và thực hiện một số các phương thức khác
 */
public class ShoppingCart {
	#region Properties
	
	public List<CartItem> Items { get; private set; }
	
	#endregion

	#region Singleton Implementation

	public static readonly ShoppingCart Instance;
	// Hàm khởi tạo
	static ShoppingCart() {
		// Nếu chưa có session chưa giỏ hàng, thì khởi tạo và đưa thông tin giỏ hàng vào 
		// ngược lại thì lấy thông tin trong giỏ hàng
		if (HttpContext.Current.Session["ASPNETShoppingCart"] == null) {
			Instance = new ShoppingCart();
			Instance.Items = new List<CartItem>();
			HttpContext.Current.Session["ASPNETShoppingCart"] = Instance;
		} else {
			Instance = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
		}
	}
	
	protected ShoppingCart() { }

	#endregion

	#region Item Modification Methods
	/**
	 * AddItem() - Add một item vào trong giỏ hàng
	 */
	public void AddItem1(int masp) {
		// Tạo mới một Cartitem

        CartItem newItem = CartItemBLL.getSP_giohang(masp);
	    
		if (Items.Contains(newItem)) {
			foreach (CartItem item in Items) {
				if (item.Equals(newItem)) {
					item.so_luong++;
                    item.thanh_tien = (double)(item.so_luong * item.Giaban);
					return;
				}
			}
		} else {
			newItem.so_luong = 1;
            newItem.thanh_tien = (double)newItem.Giaban;
			Items.Add(newItem);
		}
	}

    public void AddItem(CartItem item1)
    {
        if (Items.Contains(item1))
        {
            foreach (CartItem item in Items)
            {
                if (item.Equals(item1))
                {
                    item.so_luong++;
                    return;
                }
            }
        }
        else
        {
            item1.so_luong = 1;
            Items.Add(item1);
        }
    }

    /**
     * SetItemQuantity() - Thay đổi số lượng của sản phẩm trong giỏ hàng
     */
    public void SetItemQuantity(int masp, int soluong)
    {
        // Nếu số lượng bằng 0 thì xóa item
        if (soluong == 0)
        {
            RemoveItem(masp);
            return;
        }

        // Tìm và update số lượng cho item trong giỏ hàng
        CartItem updatedItem = new CartItem(masp);
        foreach (CartItem item in Items)
        {
            if (item.Equals(updatedItem))
            {
                item.so_luong = soluong;
                item.thanh_tien = (double)(item.so_luong * item.Giaban);
                return;
            }
        }
    }

    /**
     * RemoveItem() - Xóa item trong giỏ hàng
     */
    public void RemoveItem(int productId)
    {
        CartItem removedItem = new CartItem(productId);
        Items.Remove(removedItem);
    }
	#endregion

	#region Reporting Methods
	/**
	 * GetSubTotal() - Tính tổng tiền
	 */
	public double GetSubTotal() {
		double subTotal = 0;
		foreach (CartItem item in Items)
			subTotal += item.thanh_tien;

		return subTotal;
	}
	#endregion
}
